package com.qqclient.thread;

import com.loy.entity.Message;
import com.loy.entity.MessageType;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;

/**
 * 1. 客户端链接服务器的线程类
 */
public class ClientConnectServerThread extends Thread {

    private Socket socket;

    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        // 因为我们的线程需要在后台和服务器进行通信
        while (true){
            System.out.println("客户端线程，等待读取从服务器发送的消息......");
            try {
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                Message msg = (Message) ois.readObject();// 如果服务器没有消息发送过来，那么会阻塞在这里

                if(msg.getMesType().equals(MessageType.MESSAGE_RET_ONLINE_FRIEND)){
                    String[] olineUsers = msg.getContent().split(" ");
                    System.out.println("=======当前在线用户列表========");
                    for (int i = 0; i < olineUsers.length; i++) {
                        System.out.println("用户：" + olineUsers[i]);
                    }
                }else if(msg.getMesType().equals(MessageType.MESSAGE_COMM_MES)) {
                    // 普通的聊天消息
                    // 那么这里就是直接把服务器转发的消息，展示到控制台就行
                    System.out.println(msg.getSendTime());
                    System.out.println("\n" + msg.getSender() +"对" + msg.getGetter()+"说：" +msg.getContent());
                }else if(msg.getMesType().equals(MessageType.MESSAGE_TOALL_MES)) {
                    // 群发的消息
                    // 那么这里就是直接把服务器转发的消息，展示到控制台就行
                    System.out.println(msg.getSendTime());
                    System.out.println("\n" + msg.getSender() +"对大家说：" +msg.getContent());
                }else if(msg.getMesType().equals(MessageType.MESSAGE_FILE_MES)) {
                    // 接受方 接受文件
                    System.out.println("\n" +msg.getSender()
                            +"给"+msg.getGetter()+"发文件"+msg.getSrc()+"到我的电脑目录："+msg.getDest());
                    // 从message拿出文件字节数组，然后将文件写入到 dest目录下
                    FileOutputStream fileOutputStream = new FileOutputStream(msg.getDest());
                    fileOutputStream.write(msg.getFileBytes()); // 开始写入文件到磁盘中
                    fileOutputStream.close();
                    System.out.println("\n 八平村文件成功");
                }else {
                    System.out.println("是其他类型的message 暂时不处理");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public Socket getSocket() {
        return socket;
    }

    public void setSocket(Socket socket) {
        this.socket = socket;
    }
}
